home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / lang / c / xw2.000 / xw2 / xw / csource / x5.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-12-13  |  52.1 KB  |  1,567 lines

  1.  
  2. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  3. /*                                                                           */
  4. /*                                                                           */
  5. /*   Modul X5.C                                                              */
  6. /*                                                                           */
  7. /*                                                                           */
  8. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  9.  
  10.  
  11.  
  12. /* Header--------------------------------------------------------------------*/
  13.  
  14. #include "xbw.h"
  15.  
  16. /*  ---------------------Compiler-Modelle-----------------------------*/
  17.                       /* ---............Nicht möglich  */
  18.                       /* !!!............Noch zu machen */
  19.                       /* ???............unklar         */
  20.                       /* TC3............Turbo-C Version*/
  21.                       /*     GNU........32-Bit Version */
  22.                       /*         X11....X-Window       */
  23.  
  24. /*{{{  XbWFOb_GiveInfo(*/
  25. void  XbWFOb_GiveInfo(
  26.     XbWDDb_DbIWdw  *WI, int mausxa, int mausya, int smode){
  27.   int mxa,mya;
  28.   XbWDDb_DbIObj MOB;
  29.   int aToEdit,vToEdit,win_found;
  30.   char *inf_name,*obj_name;char afname[32],vfname[32];
  31.   int sr_mod = XbWDOb_GtMinP | XbWDOb_GtFrsO;
  32.  
  33.   mxa = mausxa- *WI->nx; mya = mausya- *WI->ny;
  34.   MOB.onm = NULL;
  35.  
  36.   smode = 0;
  37.   aToEdit = vToEdit = smode;
  38.  
  39.  
  40.   win_found = 0;
  41.   obj_name = NULL;
  42.   while ((obj_name = (char*)XbWFOb_GetPar(
  43.       &XbWVWd_W,&MOB,obj_name,sr_mod)) != NULL){
  44.     sr_mod = XbWDOb_GtMinP | XbWDOb_GtNxtO;
  45.     if (MOB.onm != NULL) {
  46.       if (XbWFTb_CmpStr((char*)WI->nm,(char*)MOB.wdw) != 0) {
  47.         if (win_found){goto weiter;};
  48.         }
  49.       else {
  50.         win_found = 1;
  51.         if ( (mxa>= *MOB.XA)&(mya>= *MOB.YA)&(mxa<= *MOB.XB)&(mya<= *MOB.YB)){
  52.           strcpy(afname,(char*)MOB.onm);
  53.           aToEdit = 1;
  54.         };};
  55.       };
  56.     };
  57.   weiter:;
  58.  
  59.   if (!(aToEdit+vToEdit)){ return;};
  60.  
  61.   obj_name = NULL;
  62.   if (aToEdit){
  63.     strcpy(vfname,afname);
  64.     };
  65.  
  66.  
  67.  
  68.   {
  69.     XbWDDb_DbIVar  *inf_var;
  70.     if ((inf_var = XbWFDb_FindGrp("OBJ",vfname)) == NULL){ return; };
  71.     if ((obj_name = (char*)XbWFDb_VarInh(inf_var,XbWDDb_Str,"i",1)) == NULL){
  72.       strcpy(obj_name,"?");
  73.       };
  74.     if ((inf_var = XbWFDb_FindGrp("WDW",(char*)XbWVWd_W.nm)) == NULL){
  75.       return;
  76.       };
  77.  
  78.     if ((inf_name = (char*)XbWFDb_VarInh(inf_var,XbWDDb_Str,"inf",1)) == NULL){
  79.       return;
  80.       };
  81.     };
  82.  
  83.  
  84.   {
  85.     FILE *ifp;
  86.     char aln[200];
  87.     char sstr[80];
  88.     if ((ifp = XbWSSy_fopen(inf_name,"rt") ) != NULL) {
  89.       aln[0] = 0;
  90.       sprintf(sstr,"%s:%s",(char*)XbWVWd_W.nm,vfname);
  91.       while ( (strstr(aln,sstr) == NULL) & (!feof(ifp)) ) { fgets(aln,199,ifp); };
  92.       while ( (aln[0] != ':') & (!feof(ifp)) ) { fgets(aln,199,ifp); };
  93.       if (!feof(ifp)) {
  94.         switch (obj_name[0]) {
  95.           case '?': case ' ': case  0 :
  96.                     if (strchr(aln,'F') != NULL) { goto ganzes_fenster_ausgeben; };
  97.                     goto nur_zeile_ausgeben;
  98.           case 'L': nur_zeile_ausgeben:;
  99.                     fgets(aln,199,ifp);
  100.                     if (strchr(aln,13) != NULL) { strcpy(strchr(aln,13),"\0"); };
  101.                     if (strchr(aln,10) != NULL) { strcpy(strchr(aln,10),"\0"); };
  102.                     XbWFTb_Message(aln);
  103.                     fclose(ifp);
  104.                     return;
  105.  
  106.           case 'F': ganzes_fenster_ausgeben:;
  107.                     fgets(aln,199,ifp);
  108.                     XbWFTb_Message("Waiting. Press any key to continue...");
  109.                     XbWFGr_PushPort(); XbWFGr_MaxPort();
  110.                     XbWSGr_TLBox(30,30,610,450,NULL,XbWVGr_Cyan,0,XbWVGr_Cyan);
  111.                     {
  112.                       int ii;
  113.                       for (ii=0; ii<50; ii++) {
  114.                         fgets(aln,199,ifp);
  115.                         if (strchr(aln,13) != NULL) { strcpy(strchr(aln,13),"\0"); };
  116.                         if (strchr(aln,10) != NULL) { strcpy(strchr(aln,10),"\0"); };
  117.                         if (aln[0] == ':') {
  118.                           XbWFGr_PopPort(); XbWFGr_ResPort();
  119.                           goto warte_auf_taste;
  120.                           };
  121.                         XbWSGr_TLBox(35,35+(ii)*(XbWFGr_THeight()+3),0,0,
  122.                           aln,XbWVGr_Cyan,XbWVGr_White,XbWVGr_Cyan);
  123.                         };
  124.                       XbWFGr_PopPort(); XbWFGr_ResPort();
  125.                       warte_auf_taste:;
  126.                       fclose(ifp);
  127.                       while (XbWSMs_IsAKey(0) == 0) {
  128.                         if (XbWVMs_Button) {
  129.                           XbWFWd_DrawAll();
  130.                           return; };
  131.                         };
  132.                       XbWFWd_DrawAll();
  133.                       return;
  134.                       };
  135.           };
  136.         }
  137.       else {
  138.         XbWFTb_Message("Sorry, no object-info found.");
  139.         };
  140.       fclose(ifp);
  141.       }
  142.     else {
  143.       XbWFTb_Message("Sorry, no info-file defined.");
  144.       };
  145.     };
  146.   };
  147. /*}}}  */
  148. /*{{{  XbWFMf_StrtHookCmd(*/
  149. int  XbWFMf_StrtHookCmd(void  *(*p)[], int(*t)[]){
  150.   return(XbWPSy_MetaCommandHook(XbWVSy_ExecNameHook, &XbWVWd_W, p, t));
  151.   };
  152. /*}}}  */
  153. /*{{{  XbWFTb_MouseWarp(*/
  154. int  XbWFTb_MouseWarp(void  *(*p)[], int(*t)[]){
  155.   int xa=0,ya=0;
  156.   if ((int)(*p)[0] < 1 ) {
  157.     XbWSMs_Warp(*XbWVWd_W.nx+(*XbWVWd_W.sx)/2,*XbWVWd_W.ny+(*XbWVWd_W.sy)/2);
  158.     return(0);
  159.     };
  160.   if ((int)(*p)[0] > 2 ) {
  161.     switch( (int)(*t)[1] ) {
  162.       case XbWDMf_IntPar:
  163.         xa = (int)(*p)[1];
  164.         break;
  165.       case XbWDMf_VLPar:
  166.         {
  167.           XbWDDb_DbIVar  *QQ;
  168.           QQ = (XbWDDb_DbIVar  *)(*p)[1];
  169.           if (QQ == NULL) { return(1); };
  170.           xa = (int)XbWFDb_GetNum(QQ,NULL,1);
  171.           };
  172.         break;
  173.       };
  174.     switch( (int)(*t)[2] ) {
  175.       case XbWDMf_IntPar:
  176.         ya = (int)(*p)[2];
  177.         break;
  178.       case XbWDMf_VLPar:
  179.         {
  180.           XbWDDb_DbIVar  *QQ;
  181.           QQ = (XbWDDb_DbIVar  *)(*p)[2];
  182.           if (QQ == NULL) { return(1); };
  183.           ya = (int)XbWFDb_GetNum(QQ,NULL,2);
  184.           };
  185.         break;
  186.       };
  187.     XbWSMs_Warp(xa,ya);
  188.     return(0);
  189.     };
  190.   return(1);
  191.   };
  192. /*}}}  */
  193.  
  194. /*{{{  XbWFDb_LoadFont(               X11    Wechsle Verzeichnis*/
  195. int  XbWFDb_LoadFont(void  *(*p)[],int (*t)[]){
  196.   char fontname[200];
  197.  
  198.   strcpy(fontname,"");
  199.   if ((int)(*p)[0] < 1 ) {return(XbWDMf_NoPara);};
  200.   switch( (int)(*t)[1] ) {
  201.     case XbWDMf_StrPar:
  202.       strcpy(fontname,(char*)(XbWFTb_PckTxt((char*)(*p)[1])));
  203.       break;
  204.     case XbWDMf_VLPar:
  205.       {
  206.         XbWDDb_DbIVar  *QQ;
  207.         char *fsp;
  208.         QQ = (XbWDDb_DbIVar  *)(*p)[1];
  209.         if (QQ == NULL) { return(1); };
  210.         fsp = (char*)XbWFDb_VarInh(QQ,XbWDDb_Str,NULL,1);
  211.         if (fsp != NULL) {
  212.           strcpy(fontname,(char*)XbWFTb_PckTxt(fsp));
  213.           };
  214.         };
  215.       break;
  216.     };
  217.  
  218.   XbWSSy_LoadFont(fontname);
  219.   return(0);
  220.   };
  221. /*}}}  */
  222.  
  223. /*{{{  XbWFMf_ExComand(    ***   Haupt-Routine zum starten von Kommandos*/
  224. int  XbWFMf_ExComand(int no, int tfun){
  225.   switch (no) {
  226.     XbWDMf_ST_R( 0,"x",           XbWFMf_StrtHookCmd);
  227.     XbWDMf_ST_R( 1,"s",           XbWFDb_AppStr);
  228.     XbWDMf_ST_R( 2,"c",           XbWFDb_AppCSt);
  229.     XbWDMf_ST_R( 3,"i",           XbWFDb_AppInt);
  230.     XbWDMf_SP_R( 4,"d",           XbWFDb_AppDbl);
  231.     XbWDMf_ST_R( 5,"pn",          XbWFDb_AppNPtr);
  232.     XbWDMf_ST_R( 6,"eg",          XbWFDb_AppGPtr);
  233.     XbWDMf_ST_R( 7,"o",           XbWFDb_AppObj);
  234.     XbWDMf_ST_R( 8,"bg",          XbWFDb_AppBg);
  235.     XbWDMf_ST_R( 9,"cn",          XbWFDb_AppChn);
  236.     XbWDMf_ST_R(10,"tk",          XbWFDb_AppTsk);
  237.     XbWDMf_ST_R(11,"ff",          XbWFDb_AppFloat);
  238.     XbWDMf_ST_R(12,"lt",          XbWFDb_AppLight);
  239.     XbWDMf_ST_R(13,"ng",          XbWFDb_NewGrp);
  240.     XbWDMf_ST_R(14,"NewProject",  XbWFDb_MarkPrj);
  241.     XbWDMf_SP_R(15,"NewGroup",    XbWFDb_MarlGrp);
  242.     XbWDMf_SP_R(16,"AppGroup",    XbWFDb_AppFPtr);
  243.     XbWDMf_S_E_(17,"End",         XbWFMf_EndOfMta);
  244.     XbWDMf_S_E_(18,"SystemTask",  XbWSOS_SpwnShel);
  245.     XbWDMf_S_E_(19,"HighBeep",    XbWFTb_HBeep);
  246.     XbWDMf_S_E_(20,"LowBeep",     XbWFTb_LBeep);
  247.     XbWDMf_S_E_(21,"MouseButton", XbWSMs_WButtUpDn);
  248.     XbWDMf_SP_R(22,"ListSystem",  XbWFDb_DbgSys);
  249.     XbWDMf_ST_R(23,"WriteFile",   XbWFDb_WrTable);
  250.     XbWDMf_ST_R(24,"ReadFile",    XbWFDb_RdTable);
  251.     XbWDMf_SP_R(25,"SystemUp",       XbWFDb_CreaSys);
  252.     XbWDMf_S_ER(26,"SystemDn",       XbWFDb_CloseSys);
  253.     XbWDMf_S_E_(27,"DrawAllWdw",  XbWFWd_DrawAll);
  254.     XbWDMf_SP__(28,"IconizeWdw",  XbWFWd_Iconize);
  255.     XbWDMf_S_E_(29,"IconAllWdw",  XbWFWd_IconAll);
  256.     XbWDMf_SP_R(30,"SelectWdw",   XbWFWd_Select);
  257.     XbWDMf_S_E_(31,"DrawWdw",     XbWFWd_DrawP);
  258.     XbWDMf_SP__(32,"SetVirtPort", XbWFWd_SetPort);
  259.     XbWDMf_S_E_(33,"SelOtherWin", XbWFWd_SlctOther);
  260.     XbWDMf_S_E_(34,"MenuLockON",  XbWFWd_LockON);
  261.     XbWDMf_S_E_(35,"MenuEditON",  XbWFWd_LockEdit);
  262.     XbWDMf_S_E_(36,"MenuLockOFF", XbWFWd_LockOFF);
  263.     XbWDMf_S_E_(37,"WdwManager",  XbWFWd_WManager); /* obsolete! */
  264.     XbWDMf_S_E_(38,"SystemStop",  XbWFSy_SysStop);
  265.     XbWDMf_SP_R(39,"*=",          XbWFDb_LinkDbI);
  266.     XbWDMf_S_E_(40,"DebugON",     XbWFMf_DebugON);
  267.     XbWDMf_SP_R(41,"sprintf",     XbWFTb_StrExpand);
  268.     XbWDMf_ST_R(42,":=",          XbWFTb_NumVal);
  269.     XbWDMf_ST_R(43,"MFXGroup",    XbWFMx_RWGroup);
  270.     XbWDMf_SP__(44,"PopUpWdw",    XbWFWd_PopUp);
  271.     XbWDMf_SP_R(45,"EditObj",     XbWFOb_EditOnly);
  272.     XbWDMf_SP_R(46,"DispObj",     XbWFOb_DispOnly);
  273.     XbWDMf_SP__(47,"PopUpBox",    XbWFTb_PopUpBox);
  274.     XbWDMf_SP__(48,"Message",     XbWFTb_PutMessage);
  275.     XbWDMf_SP__(49,"Alarm",       XbWFTb_PutAlarm);
  276.     XbWDMf_SP_R(50,"FFileNames",  XbWSOS_FilDir);
  277.     XbWDMf_SP_R(51,"Unlink",      XbWFTb_Unlink);
  278.     XbWDMf_SP_R(52,"Special",     XbWFTb_DoSpecialCommand);
  279.     XbWDMf_ST_R(53,"if",          XbWFTb_Case);
  280.     XbWDMf_SP__(54,"Error",       XbWFTb_PutError);
  281.     XbWDMf_SP_R(55,"AnswPReq",    XbWFTb_AnswerPopUpReq);
  282.     XbWDMf_ST_R(56,"PopUpMSG",    XbWSPu_Msg);
  283.     XbWDMf_ST_R(57,"PopUpDIR",    XbWSPu_Dir);
  284.     XbWDMf_ST_R(58,"SpawnCTask",  XbWSOS_SpwnStd);
  285.     XbWDMf_ST_R(59,"SpawnPTask",  XbWFTb_SpwnTskClrScr);
  286.     XbWDMf_ST_R(60,"SpawnTTask",  XbWFTb_SpwnTskTxtMod);
  287.     XbWDMf_ST_R(61,"GetWGrp",     XbWFDb_StorGrpn);
  288.     XbWDMf_ST_R(62,"MoveObjToWdw",XbWFOb_MovToWdw);
  289.     XbWDMf_S_E_(63,"DebugMFXON",  XbWFMx_DbgON);
  290.     XbWDMf_SP__(64,"ResizeWdw",   XbWSWd_Resize);
  291.     XbWDMf_S_E_(65,"MoveWdw",     XbWSWd_Move);
  292.     XbWDMf_ST_R(66,"PopEditDIR",  XbWSPu_DirEd);
  293.     XbWDMf_ST_R(67,"PackString",  XbWFTb_PackStr);
  294.     XbWDMf_S_E_(68,"DebugMtaON",  XbWFTb_DbgMta);
  295.     XbWDMf_S_E_(69,"AutoCloseON", XbWFTb_AClosON);
  296.     XbWDMf_S_E_(70,"AutoCloseOFF",XbWFTb_AClosOFF);
  297.     XbWDMf_S_E_(71,"RedrawON",    XbWFTb_RedrawON);
  298.     XbWDMf_S_E_(72,"RedrawOFF",   XbWFTb_RedrawOFF);
  299.     XbWDMf_S_E_(73,"ClrScr",      XbWFTb_ClrScr);
  300.     XbWDMf_SP_R(74,"cmd",         XbWFDb_AppCmd);
  301.     XbWDMf_ST_R(75,"MouseWarp",   XbWFTb_MouseWarp);
  302.     XbWDMf_ST_R(76,"SelectPrj",   XbWFDb_SetProject);
  303.     XbWDMf_S_E_(77,"XFlush",      XbWFSY_DoXFlush);
  304.     XbWDMf_ST_R(78,"PrjName",     XbWFDb_PrjName);
  305.     XbWDMf_ST_R(79,"ChDir",       XbWFSy_ChDir);
  306.     XbWDMf_ST_R(80,"ObjLoadIcon", XbWSSy_ObjLoadIcon);
  307.     XbWDMf_ST_R(81,"Array",       XbWFDb_CreateArray);
  308.     XbWDMf_ST_R(82,"LoadFont",    XbWFDb_LoadFont);
  309.     XbWDMf_ST_R(83,"RootWindow",  XbWSSy_RootWindow);
  310.     XbWDMf_ST_R(84,"EditFile",    XbWFDb_OpenSys);
  311.     XbWDMf_ST_R(85,"wdw",         XbWFDb_AppWdw);
  312.  
  313.     default:
  314.       switch(tfun) {
  315.         case 1: XbWVMf_com[no] = "\0"; break;
  316.         case 0: return(0);
  317.         };
  318.     };
  319.   return(0);
  320.   };
  321. /*}}}  */
  322. /*{{{  XbWFMf_GtComNo(     ***   Unterroutine zum Metafile-Interpreter*/
  323. int  XbWFMf_GtComNo(char *sstr){
  324.   int ii;
  325.   if (sstr[0] == '@'){
  326.     strcpy(XbWVSy_ExecNameHook,sstr);
  327.     return(0);
  328.     };
  329.   for (ii=1;ii < XbWDMf_MaxCmd;ii++){
  330.     if ( *((short*)XbWVMf_com[ii]) == *((short*)sstr)) {
  331.       if (strcmp(XbWVMf_com[ii],sstr) ==0){
  332.         return(ii);
  333.         };
  334.       };
  335.     };
  336.   {
  337.     char pstr[200];
  338.     sprintf(pstr,"Command not found: %s",sstr);
  339.     XbWSPu_Alarm(pstr);
  340.     };
  341.   return(-1);
  342.   };
  343. /*}}}  */
  344. /*{{{  XbWFMf_initMta(     ***   Interpreter initialisieren*/
  345. void  XbWFMf_initMta(void){
  346.   int ii;
  347.   XbWVMf_eof = 0;
  348.   for (ii = 1; ii < XbWDMf_MaxCmd; ii++){
  349.     XbWFMf_ExComand(ii,1);
  350.     };
  351.   };
  352. /*}}}  */
  353.  
  354. /*{{{  XbWFOj_Dp_M(        ***   Display fuer MFX-Objekt*/
  355. int  XbWFOj_Dp_M(XbWDDb_DbIObj  *TOB){
  356.   XbWFOj_DpColButt(TOB,0);
  357.   return(1);
  358.   };
  359. /*}}}  */
  360. /*{{{  XbWFOj_Ed_U(        ***   Color-Button*/
  361. int  XbWFOj_Ed_U(int edit, XbWDDb_DbIObj  *TOB){
  362.   if (edit == 3) {return(0); };
  363.   XbWFOj_DpSwt(TOB);
  364.   XbWFOj_DpColButt(TOB,0);
  365.   return(1);
  366.   };
  367. /*}}}  */
  368. /*{{{  XbWFOj_Ed_V(        ***   Color-Button*/
  369. int  XbWFOj_Ed_V(int edit, XbWDDb_DbIObj  *TOB){
  370.   XbWFOj_DpColButt(TOB,2);
  371.   if (edit == 3) {return(0); };
  372.   return(1);
  373.   };
  374. /*}}}  */
  375. /*{{{  XbWFOj_Dp_R(        ***   Eine Zeile aus einer Textdatei zeigen*/
  376. int  XbWFOj_Dp_R(XbWDDb_DbIObj  *TOB){
  377.   /* enthält eine Zeile aus einer Textdatei (TFRL lang) */
  378.   int dfl,off;
  379.   char *fname;
  380.   FILE *fp;
  381.   char sstr[200];
  382.   int ii;
  383.   fname = (char*)XbWFDb_VarInh(TOB->chn,XbWDDb_Str,"V",1);
  384.   XbWSGr_TLBox(XbWVOb_X,XbWVOb_Y,XbWVOb_x,XbWVOb_y,NULL,*TOB->bkc,0,*TOB->bfc);
  385.   if (fname != NULL) {
  386.     dfl = (int)XbWFDb_GetNum(TOB->chn,"v",1);
  387.     off = (int)XbWFDb_GetNum(TOB->chn,"m",1);
  388.     if ((fp = XbWSSy_fopen(fname,"rt")) == NULL) {
  389.        return(0);
  390.       };
  391.  
  392.     if (dfl == 0) {
  393.       XbWVOb_pos = 0;
  394.       ii=0;
  395.       while (ii<off) {
  396.         if (fgets(sstr,198,fp) == NULL){
  397.           ii = 30000;
  398.           off = 0;
  399.           };
  400.         ii++;
  401.         };
  402.       }
  403.     else {
  404.       fseek(fp,XbWVOb_pos,SEEK_SET);
  405.       };
  406.     if (fgets(sstr,198,fp) != NULL) {
  407.       XbWVOb_pos=ftell(fp);
  408.       if (strchr(sstr,13) != NULL) {
  409.         *((char*)strchr(sstr,13)) = 0;
  410.         };
  411.       if (strchr(sstr,10) != NULL) {
  412.         *((char*)strchr(sstr,10)) = 0;
  413.         };
  414.       XbWSGr_TLBox(XbWVOb_X+2,XbWVOb_Y+2,0,0,sstr,*TOB->bkc,*TOB->txc,0);
  415.       }
  416.     else {
  417.       XbWVOb_pos=ftell(fp);
  418.       };
  419.     fclose(fp);
  420.     };
  421.   return(1);
  422.   };
  423.  
  424.  
  425. /*}}}  */
  426. /*{{{  XbWFOj_Dp_N(        ***   Elementnamen zeigen*/
  427. int  XbWFOj_Dp_N(XbWDDb_DbIObj  *TOB){
  428.  /* Alle Namen */
  429.   int anr,aof,atp,ale,ii;
  430.   char aov[16], *ain;
  431.  
  432.  
  433.   XbWDDb_DbIVar  *gr_st;
  434.  
  435.   aof = (int)  XbWFDb_GetNum(TOB->chn,"ao",1);
  436.   anr = (int)  XbWFDb_GetNum(TOB->chn,"an",1);
  437.  
  438.   gr_st = (XbWDDb_DbIVar *)XbWDDb_DbIPrj;
  439.  
  440.   for (ii = 0; ii < aof+anr; ii++) {
  441.     if ((gr_st->tp & XbWDDb_Typ) == XbWDDb_GPtr) {
  442.        return(0);
  443.       };
  444.     XbWFDb_ForWd(&gr_st,XbWDDb_DbISys);
  445.     };
  446.  
  447.   if (XbWFDb_GetInf(gr_st,0,aov,&atp,&ain,&ale,0)) {
  448.     XbWFDb_PutStr(TOB->chn,"V",1,aov);
  449.     XbWSGr_TLBox(XbWVOb_X,XbWVOb_Y,XbWVOb_x,XbWVOb_y,aov,*TOB->bkc,*TOB->txc,*TOB->bfc);
  450.     };
  451.   return(1);
  452.   };
  453. /*}}}  */
  454. /*{{{  XbWFOj_Dp_Z(        ***   Projektnamen zeigen*/
  455. int  XbWFOj_Dp_Z(XbWDDb_DbIObj  *TOB){
  456.   int atp,ale;
  457.   char aov[16], *ain;
  458.   XbWDDb_DbIVar  *gr_st;
  459.  
  460.  
  461.   gr_st = (XbWDDb_DbIVar *)XbWDDb_DbIPrj;
  462.  
  463.   if (XbWFDb_GetInf(gr_st,0,aov,&atp,&ain,&ale,0)) {
  464.     if (atp == XbWDDb_Str) {
  465.       XbWFDb_PutStr(TOB->chn,"V",1,ain);
  466.       XbWSGr_TLBox(XbWVOb_X,XbWVOb_Y,XbWVOb_x,XbWVOb_y,ain,*TOB->bkc,*TOB->txc,*TOB->bfc);
  467.       };
  468.     };
  469.   return(1);
  470.   };
  471.  
  472.  
  473. /*}}}  */
  474. /*{{{  XbWFDb_AddVARTypeDescription(char *zstr, char *vartype){*/
  475. void XbWFDb_AddVARTypeDescription(char *zstr, char *vartype){
  476.   char sstr[200];
  477.   strcpy(sstr,zstr);
  478.   sstr[100]=0;
  479.   strcat(sstr,"                                                         ");
  480.   sstr[49]=0;
  481.   if (strcmp(vartype,"W")==0){     strcat(sstr,"Window name for object"); strcpy(zstr,sstr); return;};
  482.   if (strcmp(vartype,"X")==0){     strcat(sstr,"X left pixel of object"); strcpy(zstr,sstr); return;};
  483.   if (strcmp(vartype,"Y")==0){     strcat(sstr,"Y top pixel of object");  strcpy(zstr,sstr); return;};
  484.   if (strcmp(vartype,"x")==0){     strcat(sstr,"right pixel of object");  strcpy(zstr,sstr); return;};
  485.   if (strcmp(vartype,"y")==0){     strcat(sstr,"bottom pixel of object"); strcpy(zstr,sstr); return;};
  486.   if (strcmp(vartype,"b")==0){     strcat(sstr,"background col of obj");  strcpy(zstr,sstr); return;};
  487.   if (strcmp(vartype,"f")==0){     strcat(sstr,"bright color of object"); strcpy(zstr,sstr); return;};
  488.   if (strcmp(vartype,"F")==0){     strcat(sstr,"dark color of object");   strcpy(zstr,sstr); return;};
  489.   if (strcmp(vartype,"t")==0){     strcat(sstr,"text color of object");   strcpy(zstr,sstr); return;};
  490.   if (strcmp(vartype,"D")==0){     strcat(sstr,"DISPLAY TYPE of object"); strcpy(zstr,sstr); return;};
  491.   if (strcmp(vartype,"E")==0){     strcat(sstr,"EDIT TYPE of object");    strcpy(zstr,sstr); return;};
  492.   if (strcmp(vartype,"d")==0){     strcat(sstr,"disp status of object");  strcpy(zstr,sstr); return;};
  493.   if (strcmp(vartype,"e")==0){     strcat(sstr,"edit status of object");  strcpy(zstr,sstr); return;};
  494.   if (strcmp(vartype,"w")==0){     strcat(sstr,"draw window after edit"); strcpy(zstr,sstr); return;};
  495.   if (strcmp(vartype,"V")==0){     strcat(sstr,"OBJECT VAR PARAMETER");   strcpy(zstr,sstr); return;};
  496.   if (strcmp(vartype,"I")==0){     strcat(sstr,"info typ;L=line;F=screen"); strcpy(zstr,sstr); return;};
  497.   if (strcmp(vartype,"T")==0){     strcat(sstr,"additional displaytext"); strcpy(zstr,sstr); return;};
  498.   if (strcmp(vartype,"v")==0){     strcat(sstr,"object default value");   strcpy(zstr,sstr); return;};
  499.   if (strcmp(vartype,"m")==0){     strcat(sstr,"object minimum value");   strcpy(zstr,sstr); return;};
  500.   if (strcmp(vartype,"M")==0){     strcat(sstr,"object maximum value");   strcpy(zstr,sstr); return;};
  501.   if (strcmp(vartype,"1")==0){     strcat(sstr,"ON status: disp.text");   strcpy(zstr,sstr); return;};
  502.   if (strcmp(vartype,"0")==0){     strcat(sstr,"OFF status: disp.text");  strcpy(zstr,sstr); return;};
  503.   if (strcmp(vartype,"A")==0){     strcat(sstr,"operation for button");   strcpy(zstr,sstr); return;};
  504.   if (strcmp(vartype,"K")==0){     strcat(sstr,"func-key: exec macro");   strcpy(zstr,sstr); return;};
  505.   if (strcmp(vartype,"T")==0){     strcat(sstr,"func-key: read metafile"); strcpy(zstr,sstr); return;};
  506.   if (strcmp(vartype,"O")==0){     strcat(sstr,"func-key: edit object");   strcpy(zstr,sstr); return;};
  507.   if (strcmp(vartype,"W")==0){     strcat(sstr,"func-key: open window");   strcpy(zstr,sstr); return;};
  508.   if (strcmp(vartype,"tp")==0){    strcat(sstr,"window type;17=std");     strcpy(zstr,sstr); return;};
  509.   if (strcmp(vartype,"nx")==0){    strcat(sstr,"window x left pixel");    strcpy(zstr,sstr); return;};
  510.   if (strcmp(vartype,"ny")==0){    strcat(sstr,"window y top pixel");    strcpy(zstr,sstr); return;};
  511.   if (strcmp(vartype,"sx")==0){    strcat(sstr,"window x size pixel");    strcpy(zstr,sstr); return;};
  512.   if (strcmp(vartype,"sy")==0){    strcat(sstr,"window y size pixel");    strcpy(zstr,sstr); return;};
  513.   if (strcmp(vartype,"bd")==0){    strcat(sstr,"wdw auto backgnd draw");   strcpy(zstr,sstr); return;};
  514.   if (strcmp(vartype,"fmt")==0){   strcat(sstr,"float displyformat str"); strcpy(zstr,sstr); return;};
  515.   if (strcmp(vartype,"sca")==0){   strcat(sstr,"float scale factor");     strcpy(zstr,sstr); return;};
  516.   if (strcmp(vartype,"una")==0){   strcat(sstr,"float units factor");     strcpy(zstr,sstr); return;};
  517.   if (strcmp(vartype,"eha")==0){   strcat(sstr,"float disply units str"); strcpy(zstr,sstr); return;};
  518.   if (strcmp(vartype,"OBJ")==0){   strcat(sstr,"object group name");      strcpy(zstr,sstr); return;};
  519.   if (strcmp(vartype,"WDW")==0){   strcat(sstr,"window group name");      strcpy(zstr,sstr); return;};
  520.   if (strcmp(vartype,"MFX")==0){   strcat(sstr,"mfx I/O group name");     strcpy(zstr,sstr); return;};
  521.   if (strcmp(vartype,"OBX")==0){   strcat(sstr,"object editor groupname"); strcpy(zstr,sstr); return;};
  522.   if (strcmp(vartype,"SVR")==0){   strcat(sstr,"system var group name");  strcpy(zstr,sstr); return;};
  523.   if (strcmp(vartype,"USR")==0){   strcat(sstr,"user varia group name");  strcpy(zstr,sstr); return;};
  524.   if (strcmp(vartype,"KEY")==0){   strcat(sstr,"keyboard var group name"); strcpy(zstr,sstr); return;};
  525.   if (strncmp(vartype,"rbK",3)==0){   strcat(sstr,"exec cmd;then edit obj"); strcpy(zstr,sstr); return;};
  526.   if (strncmp(vartype,"raK",3)==0){   strcat(sstr,"edit obj;then exec cmd"); strcpy(zstr,sstr); return;};
  527.   if (strncmp(vartype,"rqK",3)==0){   strcat(sstr,"edit obj queue;then cmd"); strcpy(zstr,sstr); return;};
  528.   if (strncmp(vartype,"wbX",3)==0){   strcat(sstr,"writ.MFX;then edit obj"); strcpy(zstr,sstr); return;};
  529.   if (strncmp(vartype,"rbX",3)==0){   strcat(sstr,"read MFX;then edit obj"); strcpy(zstr,sstr); return;};
  530.   if (strncmp(vartype,"waX",3)==0){   strcat(sstr,"edit obj;then writ.MFX"); strcpy(zstr,sstr); return;};
  531.   if (strncmp(vartype,"raX",3)==0){   strcat(sstr,"edit obj;then read MFX"); strcpy(zstr,sstr); return;};
  532.   if (strncmp(vartype,"rbT",3)==0){   strcat(sstr,"exec macro;then edit o."); strcpy(zstr,sstr); return;};
  533.   if (strncmp(vartype,"raT",3)==0){   strcat(sstr,"edit o;then exec macro"); strcpy(zstr,sstr); return;};
  534.   if (strncmp(vartype,"rqT",3)==0){   strcat(sstr,"edit obqueue;then macro"); strcpy(zstr,sstr); return;};
  535.   if (strncmp(vartype,"dpO",3)==0){   strcat(sstr,"edit;then disply object"); strcpy(zstr,sstr); return;};
  536.   if (strncmp(vartype,"edO",3)==0){   strcat(sstr,"edit obj on 'CURSOR UP'"); strcpy(zstr,sstr); return;};
  537.   if (strncmp(vartype,"wov",3)==0){   strcat(sstr,"1=wdw was written over"); strcpy(zstr,sstr); return;};
  538.   if (strcmp(vartype,"icn")==0){   strcat(sstr,"1=wdw is iconized     "); strcpy(zstr,sstr); return;};
  539.   if (strcmp(vartype,"bkc")==0){   strcat(sstr,"background col of wdw "); strcpy(zstr,sstr); return;};
  540.   if (strcmp(vartype,"txc")==0){   strcat(sstr,"text color of window  "); strcpy(zstr,sstr); return;};
  541.   if (strcmp(vartype,"bfc")==0){   strcat(sstr,"bright window color   "); strcpy(zstr,sstr); return;};
  542.   if (strcmp(vartype,"dfc")==0){   strcat(sstr,"dark window color     "); strcpy(zstr,sstr); return;};
  543.   if (strcmp(vartype,"wfx")==0){   strcat(sstr,"1=wdw locked;no exit  "); strcpy(zstr,sstr); return;};
  544.   if (strcmp(vartype,"wfe")==0){   strcat(sstr,"1=lock wdw on objclick"); strcpy(zstr,sstr); return;};
  545.   if (strcmp(vartype,"inf")==0){   strcat(sstr,"info file for window  "); strcpy(zstr,sstr); return;};
  546.   if (strcmp(vartype,"obj")==0){   strcat(sstr,"pointer to 1st object "); strcpy(zstr,sstr); return;};
  547.   if (strcmp(vartype,"layer")==0){   strcat(sstr,"(reserved value)"); strcpy(zstr,sstr); return;};
  548.   };
  549. /*}}}  */
  550. /*{{{  XbWFOj_Dp_A(        ***   Automatisch Elementinhalt belieb. Typs*/
  551. int  XbWFOj_Dp_A(XbWDDb_DbIObj  *TOB, int this_obj){
  552.  /* AUTOMATIC;
  553.      "aln" Name der Liste zum Editieren
  554.      "agn" Name der Var-Gruppe zum editieren
  555.      "an" ist startnummer der var. zum editieren
  556.      "ao" ist listen-offset zu an; */
  557.  
  558.   int anr,aof,atp,ale;
  559.   char aov[16], *ain;
  560.   char *agr, *aon;
  561.   int *iinh;
  562.   double *dinh;
  563.   XbWDDb_DbIPtr *linh;
  564.   char sstr[200];
  565.  
  566.   XbWDDb_DbIVar  *gr_st;
  567.   XbWDDb_DbIVar  *ao_st;
  568.  
  569.   anr = (int)  XbWFDb_GetNum(TOB->chn,"an",1);
  570.   aof = (int)  XbWFDb_GetNum(TOB->chn,"ao",1);
  571.  
  572.   if (!this_obj){
  573.     if (aof == 0) {
  574.       static char aagr[100];
  575.       static char aaon[100];
  576.       gr_st = XbWFDb_FindGrp("OBX","act");
  577.  
  578.       if (gr_st == NULL) {
  579.         XbWVOb_mgr  = NULL;
  580.         XbWVOb_mao  = NULL;
  581.         return(0);
  582.         };
  583.  
  584.       agr = (char*)XbWFDb_VarInh(gr_st,XbWDDb_Str,"aln",1);
  585.       aon = (char*)XbWFDb_VarInh(gr_st,XbWDDb_Str,"agn",1);
  586.       strcpy(aagr,(char*)(XbWFTb_PckTxt(agr)));
  587.       strcpy(aaon,(char*)(XbWFTb_PckTxt(aon)));
  588.  
  589.       if ((ao_st = XbWFDb_FindGrp(aagr,aaon)) == NULL) {
  590.         XbWVOb_mgr  = NULL;
  591.         XbWVOb_mao  = NULL;
  592.         return(0);
  593.         };
  594.       XbWVOb_mgr  = gr_st;
  595.       XbWVOb_agr = aagr;
  596.       XbWVOb_aon = aaon;
  597.       XbWVOb_mao  = ao_st;
  598.       }
  599.     else {
  600.       if (XbWVOb_mgr == NULL){
  601.         XbWVOb_mao  = NULL;
  602.         return(0);
  603.         };
  604.       if (XbWVOb_mao == NULL){
  605.         XbWVOb_mgr  = NULL;
  606.         return(0);
  607.         };
  608.  
  609.       gr_st = XbWVOb_mgr;
  610.       agr   = XbWVOb_agr;
  611.       aon   = XbWVOb_aon;
  612.       ao_st = XbWVOb_mao;
  613.       };
  614.     }
  615.   else {
  616.     ao_st = TOB->chn;
  617.     gr_st = XbWVOb_mgr;
  618.     agr   = XbWVOb_agr;
  619.     aon   = XbWVOb_aon;
  620.     };
  621.  
  622.   strcpy(sstr,"");
  623.  
  624.   if (XbWFDb_GetInf(ao_st,anr+aof,aov,&atp,&ain,&ale,0)) {
  625.     if (!this_obj){ sprintf(sstr,"[%s] UNKNOWN TYPE",aov); }
  626.     else { sprintf(sstr,"???"); };
  627.     switch (atp) {
  628.       case XbWDDb_Int: iinh = (int*)ain;
  629.                    if (!this_obj){
  630.                      sprintf(sstr,"i(%s %d);",aov,*iinh);
  631.                      }
  632.                    else {
  633.                      sprintf(sstr,"%d",*iinh);
  634.                      };
  635.                    XbWFDb_AddVARTypeDescription(sstr,aov);
  636.                    break;
  637.       case XbWDDb_Dbl: dinh = (double*)ain;
  638.                    { char *ffmt; char sstr1[100];
  639.                      if ((ffmt=(char*)XbWFDb_VarInh(TOB->chn,XbWDDb_Str,"fmt",1)) ==NULL){
  640.                        ffmt = "%9.5f";
  641.                        };
  642.                      sprintf(sstr1,(char*)XbWFTb_PckTxt(ffmt),*dinh);
  643.                      if (!this_obj) {
  644.                        sprintf(sstr,"d(%s %s);",aov,sstr1);
  645.                        }
  646.                      else {
  647.                        sprintf(sstr,sstr1);
  648.                        };
  649.                      };
  650.                    XbWFDb_AddVARTypeDescription(sstr,aov);
  651.                    break;
  652.       case XbWDDb_Str:
  653.                    if (!this_obj){
  654.                      sprintf(sstr,"s(%s %d (\"%s\"));",aov,ale,ain);
  655.                      }
  656.                    else { sprintf(sstr,"%s",ain); };
  657.                    XbWFDb_AddVARTypeDescription(sstr,aov);
  658.                    break;
  659.       case XbWDDb_NPtr: {
  660.                      char pstr[100];
  661.                      linh = (XbWDDb_DbIPtr *)ain;
  662.                      strcpy(pstr,(char*)XbWFDb_DbIToStr(*linh,XbWDDb_DbISys));
  663.                      if (!this_obj){
  664.                        sprintf(sstr,"pn(%s (ptr)%s);",aov,pstr);
  665.                        }
  666.                      else { sprintf(sstr,"%s",pstr); };
  667.                      };
  668.                    XbWFDb_AddVARTypeDescription(sstr,aov);
  669.                    break;
  670.       case XbWDDb_FPtr: {
  671.                      char pstr[100];
  672.                      linh = (XbWDDb_DbIPtr *)ain;
  673.                      strcpy(pstr,(char*)XbWFDb_DbIToStr(*linh,XbWDDb_DbISys));
  674.                      if (!this_obj){
  675.                        sprintf(sstr," %s cont'd. at %s",aov,pstr);
  676.                        }
  677.                      else { sprintf(sstr,"%s",pstr); };
  678.                      };
  679.                    break;
  680.       case XbWDDb_IPtr: {
  681.                      char pstr[100];
  682.                      linh = (XbWDDb_DbIPtr *)ain;
  683.                      strcpy(pstr,(char*)XbWFDb_DbIToStr(*linh,XbWDDb_DbISys));
  684.                      if (!this_obj){
  685.                        sprintf(sstr,"pn(%s (ptr)%s);",aov,pstr);
  686.                        }
  687.                      else { sprintf(sstr,"%s",pstr); };
  688.                      };
  689.                    break;
  690.       case XbWDDb_GPtr: {
  691.                      char pstr[100];
  692.                      linh = (XbWDDb_DbIPtr *)ain;
  693.                      strcpy(pstr,(char*)XbWFDb_DbIToStr(*linh,XbWDDb_DbISys));
  694.                      if (!this_obj){
  695.                        sprintf(sstr,"eg(); %s End of group; Pointer to %s (start of group)",aov,pstr);
  696.                        }
  697.                      else { sprintf(sstr,"%s",pstr); };
  698.                      };
  699.                    break;
  700.       };
  701.     };
  702.   XbWSGr_TLBox(XbWVOb_X,XbWVOb_Y,XbWVOb_x,XbWVOb_y,sstr,*TOB->bkc,*TOB->txc,*TOB->bfc);
  703.   return(1);
  704.   };
  705.  
  706.  
  707.  
  708. /*}}}  */
  709. /*{{{  XbWFOj_Dp_G(        ***   Gruppennamen zeigen*/
  710. int  XbWFOj_Dp_G(XbWDDb_DbIObj  *TOB){
  711.  /* Gruppenname darstellen;
  712.      "al" Name der Liste
  713.      "an" ist startnummer der Gruppe zum Darstellen
  714.      "ao" ist listen-offset zu an; */
  715.  
  716.   int anr,aof,atp,natp,ale,nale,ii;
  717.   char aov[16], *ain, *nain;
  718.   char *agr, *aon;
  719.  
  720.   XbWDDb_DbIVar  *gr_st;
  721.  
  722.   agr = (char*)XbWFDb_VarInh(TOB->chn,XbWDDb_Str,"al",1);
  723.   aon = (char*)XbWFDb_VarInh(TOB->chn,XbWDDb_Str,"V",1);
  724.   anr = (int)  XbWFDb_GetNum(TOB->chn,"an",1);
  725.   aof = (int)  XbWFDb_GetNum(TOB->chn,"ao",1);
  726.  
  727.   gr_st = XbWFDb_FindGrp(agr,NULL);
  728.   for (ii = 0; ii < aof+anr; ii++) {
  729.     gr_st = XbWFDb_NextGrp(gr_st,NULL);
  730.     if (gr_st == NULL){ return(0); };
  731.     };
  732.  
  733.   if (XbWFDb_GetInf(gr_st,0,aov,&atp,&ain,&ale,0)) {
  734.     switch (atp) {
  735.       case XbWDDb_Str:
  736.                    if (XbWFDb_GetInf(TOB->chn,-1,"V",&natp,&nain,&nale,0)) {
  737.                      if (nale <= strlen(ain)){
  738.                        printf("ERROR: String VAR-Element \"OBJ:%s.V\" is too small!\n",
  739.                          TOB->onm);
  740.                        return(1);
  741.                        };
  742.                      strcpy(aon,ain);
  743.                      XbWSGr_TLBox(XbWVOb_X,XbWVOb_Y,XbWVOb_x,XbWVOb_y,aon,*TOB->bkc,*TOB->txc,*TOB->bfc);
  744.                      };
  745.                    break;
  746.       };
  747.     };
  748.   return(1);
  749.   };
  750.  
  751. /*}}}  */
  752. /*{{{  XbWFOj_Dp_S(        ***   String display*/
  753. int  XbWFOj_Dp_S(XbWDDb_DbIObj  *TOB){
  754.   char *txtstr;
  755.   txtstr = (char*)XbWFDb_VarInh(TOB->chn,XbWDDb_Str,"V",1);
  756.   if (txtstr == NULL) {return(0); };
  757.   XbWSGr_TLBox(XbWVOb_X,XbWVOb_Y,XbWVOb_x,XbWVOb_y,txtstr,*TOB->bkc,*TOB->txc,*TOB->bfc);
  758.   return(1);
  759.   };
  760. /*}}}  */
  761. /*{{{  XbWFOj_Dp_T(        ***   Text display*/
  762. int  XbWFOj_Dp_T(XbWDDb_DbIObj  *TOB){
  763.   char *txtstr;
  764.   txtstr = (char*)XbWFDb_VarInh(TOB->chn,XbWDDb_Str,"V",1);
  765.   if (txtstr == NULL) {return(0); };
  766.   XbWSGr_TLBox(XbWVOb_X,XbWVOb_Y,XbWVOb_x,XbWVOb_y,txtstr,*TOB->bkc,*TOB->txc,*TOB->bkc);
  767.   return(1);
  768.   };
  769. /*}}}  */
  770. /*{{{  XbWFOj_DpInt(       ***   Integer display*/
  771. int  XbWFOj_DpInt(XbWDDb_DbIObj  *TOB){
  772.   XbWFOj_GetNum(TOB);
  773.   XbWSGr_RBBox(XbWVOb_X,XbWVOb_Y,XbWVOb_x,XbWVOb_y,XbWVOb_GTxt,*TOB->bkc,*TOB->txc,*TOB->bfc);
  774.   return(1);
  775.   };
  776. /*}}}  */
  777. /*{{{  XbWFOj_Dp_BKS(      ***   Pfeil-Knopf zeigen*/
  778. int  XbWFOj_Dp_BKS(XbWDDb_DbIObj  *TOB){
  779.   XbWSGr_TLBox(XbWVOb_X,XbWVOb_Y,XbWVOb_x,XbWVOb_y,NULL,*TOB->bkc,0,*TOB->bfc);
  780.   XbWFOj_DpArrow(TOB,(char*)&(TOB->odt[1]));
  781.   return(1);
  782.   };
  783. /*}}}  */
  784. /*{{{  XbWFOj_Dp_P(        ***   Icon zeigen*/
  785. int  XbWFOj_Dp_P(XbWDDb_DbIObj  *TOB){
  786.   XbWSGr_TLBox(XbWVOb_X,XbWVOb_Y,XbWVOb_x,XbWVOb_y,NULL,*TOB->bkc,0,*TOB->bfc);
  787.   XbWSGr_DspIcon(TOB);
  788.   return(1);
  789.   };
  790. /*}}}  */
  791. /*{{{  XbWFOj_Dp_X(        ***   XS-Slider,XL-Line,XE-Ellipse,XB-Box*/
  792. int  XbWFOj_Dp_X(XbWDDb_DbIObj  *TOB){
  793.   switch(TOB->odt[1]){
  794.     case 'S':
  795.               XbWSGr_TLBox(XbWVOb_X,XbWVOb_Y,XbWVOb_x,XbWVOb_y,NULL,*TOB->bkc,0,*TOB->bfc);
  796.               XbWFOj_DpSlider(TOB,0);
  797.               break;
  798.     case 'L': XbWSGr_Line(XbWVOb_X,XbWVOb_Y,XbWVOb_x,XbWVOb_y,*TOB->dfc);
  799.               break;
  800.     case 'E': XbWFOj_DpEllipse(TOB);
  801.               break;
  802.     case 'B': XbWSGr_TLBox(XbWVOb_X,XbWVOb_Y,XbWVOb_x,XbWVOb_y,NULL,*TOB->bkc,0,*TOB->bfc);
  803.               break;
  804.     };
  805.   return(1);
  806.   };
  807. /*}}}  */
  808.  
  809. /*{{{  XbWFTb_DoSpecialCommand(***   Hauptroutine fuer alle Erweiterungen*/
  810. int  XbWFTb_DoSpecialCommand(void  *(*p)[]){
  811.   if (strcmp("RAD_BFN",(char*)(*p)[1]) == 0) {
  812.     return( XbWFTb_MkRadFil(p));
  813.     };
  814.   if (strcmp("RAD_CFN",(char*)(*p)[1]) == 0) {
  815.     return( XbWFTb_CkRadFil(p));
  816.     };
  817.   if (strcmp("EXC_STR",(char*)(*p)[1]) == 0) {
  818.     return( XbWFTb_ReplString(p));
  819.     };
  820.   return(1);
  821.   };
  822. /*}}}  */
  823. /*{{{  XbWFTb_MkRadFil(    ***   RADAN-Filenamen generieren (VW-Speziell)*/
  824. int  XbWFTb_MkRadFil(void  *(*p)[]){
  825.   char *fildir,*filnam;
  826.   int band,versuch,step,rad;
  827.   char *rotfix;
  828.   char sstr[60];
  829.   /* ============== ANZAHL PARAMETER PRUEFEN                            */
  830.   if ( (int)(*p)[0] != 8) { return(1); };
  831.   /* ============== Der ERSTE PARAMETER ist der FUNKTIONSNAME!!         */
  832.   fildir =  (char*)(*p)[2];
  833.   filnam =  (char*)(*p)[3];
  834.   rotfix =  (char*)(*p)[4];
  835.   band =      (int)(*p)[5];
  836.   versuch =   (int)(*p)[6];
  837.   step =      (int)(*p)[7];
  838.   rad =       (int)(*p)[8];
  839.   if (fildir == NULL) { return(1); };
  840.   if (filnam == NULL) { return(1); };
  841.   if (rotfix == NULL) { return(1); };
  842.   sprintf(filnam,"00000000.000");
  843.   filnam[0] = rotfix[0];
  844.   sprintf(sstr,"%3d",band);
  845.   if (sstr[0] != ' ') { filnam[1] = sstr[0]; };
  846.   if (sstr[1] != ' ') { filnam[2] = sstr[1]; };
  847.   if (sstr[2] != ' ') { filnam[3] = sstr[2]; };
  848.   sprintf(sstr,"%4d",versuch);
  849.   if (sstr[0] != ' ') { filnam[4] = sstr[0]; };
  850.   if (sstr[1] != ' ') { filnam[5] = sstr[1]; };
  851.   if (sstr[2] != ' ') { filnam[6] = sstr[2]; };
  852.   if (sstr[3] != ' ') { filnam[7] = sstr[3]; };
  853.   sprintf(sstr,"%2d",step);
  854.   if (sstr[0] != ' ') { filnam[10] = sstr[0]; };
  855.   if (sstr[1] != ' ') { filnam[11] = sstr[1]; };
  856.   sprintf(sstr,"%1d",rad);
  857.   if (sstr[0] != ' ') { filnam[9] = sstr[0]; };
  858.   return(0);
  859.   };
  860. /*}}}  */
  861. /*{{{  XbWFTb_CkRadFil(    ***   RADAN-Filenamen pruefen (VW-Speziell)*/
  862. int  XbWFTb_CkRadFil(void  *(*p)[]){
  863.   FILE *fp;
  864.   char *fildir,*filnam;
  865.   char sstr[60];
  866.   int *status;
  867.   /* ============== ANZAHL PARAMETER PRÜFEN                             */
  868.   if ( (int)(*p)[0] != 4) { return(1); };
  869.   /* ============== Der ERSTE PARAMETER ist der FUNKTIONSNAME!!         */
  870.   fildir =  (char*)(*p)[2];
  871.   filnam =  (char*)(*p)[3];
  872.   status =   (int*)(*p)[4];
  873.   if (fildir == NULL) { return(1); };
  874.   if (filnam == NULL) { return(1); };
  875.   if (status == NULL) { return(1); };
  876.   sprintf(sstr,"%s%s",fildir,filnam);
  877.   if ((fp = XbWSSy_fopen(sstr,"rb")) != NULL){
  878.     fclose(fp);
  879.     *status = 1;
  880.     }
  881.   else {
  882.     strcpy(filnam,"(null)");
  883.     *status = 0;
  884.     };
  885.   return(0);
  886.   };
  887. /*}}}  */
  888.  
  889. /*{{{  XbWFTb_ReplString(  ***   String-Ersetzung*/
  890. int  XbWFTb_ReplString(void  *(*p)[]){
  891.   char *stra,*strb,*strc;
  892.   if ((int)(*p)[0] != 4) { return(1);};
  893.   stra = (char*)(*p)[2];
  894.   strb = (char*)(*p)[3];
  895.   strc = (char*)(*p)[4];
  896.   if (strstr(stra,strb) != NULL) {
  897.     strcpy(strstr(stra,strb),strc);
  898.     };
  899.   return(0);
  900.   };
  901. /*}}}  */
  902. /*{{{  XbWFTb_PckTxt(      ***   Text von Spaces befreien*/
  903. char  *XbWFTb_PckTxt(char *str){
  904.   int cc,ll;
  905.   cc = 0;
  906.   while((str[cc] == ' ') & (strlen(str) > cc)) {
  907.     cc++;
  908.     };
  909.   ll = 0;
  910.   while((ll< strlen((char *)str))&(ll<XbWDTb_PckTLen)){
  911.     XbWVTb_PTS[ll] = str[cc+ll];
  912.     ll++;
  913.     };
  914.   if (strlen(str) >= XbWDTb_PckTLen) {
  915.     XbWVTb_PTS[XbWDTb_PckTLen-1] = 0;
  916.     }
  917.   else {
  918.     XbWVTb_PTS[strlen(str)] = 0;
  919.     };
  920.   while((XbWVTb_PTS[strlen(XbWVTb_PTS)-1] == ' ') & (strlen(XbWVTb_PTS) > 0)) {
  921.     XbWVTb_PTS[strlen((char *)XbWVTb_PTS)-1] = 0;
  922.     };
  923.   return(XbWVTb_PTS);
  924.   };
  925. /*}}}  */
  926. /*{{{  XbWFTb_InBox(       ***   Maus in Box ??*/
  927. boolean  XbWFTb_InBox(
  928.     int sxa,int sya,int xa,int ya,int xb,int yb){
  929.   int mrk;
  930.   if (xa > xb)   { mrk = xb; xb = xa; xa = mrk;};
  931.   if (ya > yb)   { mrk = ya; ya = yb; yb = mrk;};
  932.   if ((sxa >= xa) & (sxa <= xb) &
  933.       (sya >= ya) & (sya <= yb))  {return(1);}
  934.   else {return(0);};
  935.   };
  936. /*}}}  */
  937. /*{{{  XbWFTb_ColCon(      ***   Farbkonvertierung fuer Textfarbe*/
  938. int  XbWFTb_ColCon(int dunkelfarbe){
  939.   int textcol=0;
  940.   if (dunkelfarbe ==  XbWVGr_Black      )
  941.     {textcol = XbWVGr_White; goto weiter;};
  942.   if (dunkelfarbe ==  XbWVGr_Blue       )
  943.     {textcol = XbWVGr_White; goto weiter;};
  944.   if (dunkelfarbe ==  XbWVGr_Green      )
  945.     {textcol = XbWVGr_White; goto weiter;};
  946.   if (dunkelfarbe ==  XbWVGr_Cyan       )
  947.     {textcol = XbWVGr_White; goto weiter;};
  948.   if (dunkelfarbe ==  XbWVGr_Red        )
  949.     {textcol = XbWVGr_White; goto weiter;};
  950.   if (dunkelfarbe ==  XbWVGr_Magenta    )
  951.     {textcol = XbWVGr_White; goto weiter;};
  952.   if (dunkelfarbe ==  XbWVGr_Brown      )
  953.     {textcol = XbWVGr_White; goto weiter;};
  954.   if (dunkelfarbe ==  XbWVGr_LGray  )
  955.     {textcol = XbWVGr_White; goto weiter;};
  956.   if (dunkelfarbe ==  XbWVGr_DGray   )
  957.     {textcol = XbWVGr_White; goto weiter;};
  958.   if (dunkelfarbe ==  XbWVGr_LBlue  )
  959.     {textcol = XbWVGr_White; goto weiter;};
  960.   if (dunkelfarbe ==  XbWVGr_LGreen )
  961.     {textcol = XbWVGr_DGray; goto weiter;};
  962.   if (dunkelfarbe ==  XbWVGr_LCyan  )
  963.     {textcol = XbWVGr_DGray; goto weiter;};
  964.   if (dunkelfarbe ==  XbWVGr_LRed   )
  965.     {textcol = XbWVGr_White; goto weiter;};
  966.   if (dunkelfarbe ==  XbWVGr_LMagenta)
  967.     {textcol = XbWVGr_White; goto weiter;};
  968.   if (dunkelfarbe ==  XbWVGr_Yellow     )
  969.     {textcol = XbWVGr_DGray; goto weiter;};
  970.   if (dunkelfarbe ==  XbWVGr_White      )
  971.     {textcol = XbWVGr_DGray; goto weiter;};
  972.   weiter:;
  973.   return(textcol);
  974.   };
  975. /*}}}  */
  976. /*{{{  XbWFTb_CmpStr(      ***   Strings vergleichen*/
  977. int  XbWFTb_CmpStr(char *stra, char *strb){
  978.   if (stra == NULL) { return(1); };
  979.   if (strb == NULL) { return(1); };
  980.   return(strcmp(stra,strb));
  981.   };
  982. /*}}}  */
  983. /*{{{  XbWFTb_PutMessage(  ***   Nachricht unten ausgeben*/
  984. void  XbWFTb_PutMessage(void  *(*p)[]){
  985.   if ((int)(*p)[0] >0){
  986.     XbWFTb_Message((char*)(*p)[1]);
  987.     };
  988.   };
  989. /*}}}  */
  990. /*{{{  XbWFTb_PutAlarm(    ***   Nachricht; warte auf Taste*/
  991. void  XbWFTb_PutAlarm(void  *(*p)[]){
  992.   if ((int)(*p)[0] >0){
  993.     XbWSPu_Alarm((char*)(*p)[1]);
  994.     };
  995.   };
  996. /*}}}  */
  997. /*{{{  XbWFTb_PutError(    ***   Nachricht; Taste; PopUpBox ausgeben*/
  998. void  XbWFTb_PutError(void  *(*p)[]){
  999.   if ((int)(*p)[0] >0){
  1000.     XbWFTb_Error((char*)(*p)[1]);
  1001.     };
  1002.   };
  1003. /*}}}  */
  1004. /*{{{  XbWFTb_Case(        ***   Case-Abfrage fuer Metafile-Interpreter*/
  1005. int  XbWFTb_Case(void  *(*p)[],int (*t)[]){
  1006.   double v1,v2;
  1007.   char *s1,*s2;
  1008.   int is1string=0;
  1009.   int is2string=0;
  1010.   char *oper;
  1011.   if ((int)(*p)[0] != 4) {return(1);};
  1012.   switch ((int)(*t)[1]){
  1013.     case XbWDMf_VLPar:
  1014.       {
  1015.         XbWDDb_DbIVar  *MV;
  1016.         MV = (XbWDDb_DbIVar  *)(*p)[1];
  1017.         if (MV == NULL)  {return(1); };
  1018.         v1 = XbWFDb_GetNum(MV,NULL,1);
  1019.         };
  1020.       break;
  1021.     case XbWDMf_StrPar:
  1022.     case XbWDMf_VIPar:
  1023.        s1 = (char*)(*p)[1];
  1024.        is1string=1;
  1025.        break;
  1026.  
  1027.     case XbWDMf_VPPar:
  1028.     case XbWDMf_IntPar: v1 = (int)(*p)[1]; break;
  1029.     default:return(1);
  1030.     };
  1031.   switch ((int)(*t)[3]){
  1032.     case XbWDMf_VLPar:
  1033.       {
  1034.         XbWDDb_DbIVar  *MV;
  1035.         MV = (XbWDDb_DbIVar  *)(*p)[3];
  1036.         if (MV == NULL)  {return(1); };
  1037.         v2 = XbWFDb_GetNum(MV,NULL,1);
  1038.         };
  1039.       break;
  1040.     case XbWDMf_StrPar:
  1041.     case XbWDMf_VIPar:
  1042.        s2 = (char*)(*p)[3];
  1043.        is2string=1;
  1044.        break;
  1045.     case XbWDMf_VPPar:
  1046.     case XbWDMf_IntPar: v2 = (int)(*p)[3]; break;
  1047.     default:return(1);
  1048.     };
  1049.   oper = (char*)(*p)[2];
  1050.   if (is1string != is2string){
  1051.     puts("ERR: comparing string and non-string!");
  1052.     return(1);
  1053.     };
  1054.   switch(oper[0]){
  1055.     case '=' :
  1056.       if (is1string+is2string){
  1057.         if (!XbWFTb_CmpStr(s1,s2)) { XbWFMf_ReadMakro((char*)(*p)[4]); };
  1058.         }
  1059.       else {
  1060.         if (v1 == v2) { XbWFMf_ReadMakro((char*)(*p)[4]); };
  1061.         };
  1062.       break;
  1063.     case '>' :
  1064.       switch(oper[1]) {
  1065.         case '=' :
  1066.           if (is1string+is2string){
  1067.             if (XbWFTb_CmpStr(s1,s2)>=0) { XbWFMf_ReadMakro((char*)(*p)[4]); };
  1068.             }
  1069.           else {
  1070.             if (v1 >= v2) { XbWFMf_ReadMakro((char*)(*p)[4]); }; break;
  1071.             };
  1072.         default:
  1073.           if (is1string+is2string){
  1074.             if (!XbWFTb_CmpStr(s1,s2)) { XbWFMf_ReadMakro((char*)(*p)[4]); };
  1075.             }
  1076.           else {
  1077.             if (v1 > v2) { XbWFMf_ReadMakro((char*)(*p)[4]); }; break;
  1078.             };
  1079.         };
  1080.       break;
  1081.     case '<' :
  1082.       switch(oper[1]) {
  1083.         case '=' :
  1084.           if (is1string+is2string){
  1085.             if (XbWFTb_CmpStr(s1,s2)<=0) { XbWFMf_ReadMakro((char*)(*p)[4]); };
  1086.             }
  1087.           else {
  1088.             if (v1 <= v2) { XbWFMf_ReadMakro((char*)(*p)[4]); }; break;
  1089.             };
  1090.         default:
  1091.           if (is1string+is2string){
  1092.             if (XbWFTb_CmpStr(s1,s2)<=0) { XbWFMf_ReadMakro((char*)(*p)[4]); };
  1093.             }
  1094.           else {
  1095.             if (v1 < v2) { XbWFMf_ReadMakro((char*)(*p)[4]); }; break;
  1096.             };
  1097.         };
  1098.       break;
  1099.     case '!' :
  1100.       if (is1string+is2string){
  1101.         if (XbWFTb_CmpStr(s1,s2)!=0) { XbWFMf_ReadMakro((char*)(*p)[4]); };
  1102.         }
  1103.       else {
  1104.         if (v1 != v2) { XbWFMf_ReadMakro((char*)(*p)[4]); };
  1105.         };
  1106.       break;
  1107.     };
  1108.   return(0);
  1109.   };
  1110. /*}}}  */
  1111. /*{{{  XbWFTb_PackStr(     ***   String-Element Inhalt packen (PckText)*/
  1112. int  XbWFTb_PackStr(void  *(*p)[], int (*t)[]) {
  1113.   char *ziel;
  1114.   if ( (int)(*p)[0] < 1) {
  1115.     return(1);
  1116.     };
  1117.   switch ( (int)(*t)[1]) {
  1118.     case XbWDMf_StrPar: ziel = (char*)(*p)[1]; break;
  1119.     case XbWDMf_VLPar:  {
  1120.                           XbWDDb_DbIVar  *QQ;
  1121.                           QQ = (XbWDDb_DbIVar  *)(*p)[1];
  1122.                           if (QQ == NULL) { return(1); };
  1123.                           ziel = (char*)XbWFDb_VarInh(QQ,XbWDDb_Str,NULL,1);
  1124.                           break;
  1125.                           };
  1126.     default: return(1);;
  1127.     };
  1128.   if (ziel==NULL) { return(1); };
  1129.   strcpy(ziel,(char*)XbWFTb_PckTxt(ziel));
  1130.   return(0);
  1131.   };
  1132. /*}}}  */
  1133. /*{{{  XbWFDb_StorGrpn(    ***   Name Aktuelle Gruppe in Element speichern*/
  1134. int  XbWFDb_StorGrpn(void  *(*p)[], int (*t)[]) {
  1135.   char *win_name,*grp_name;
  1136.   if ( (int)(*p)[0] < 2) {
  1137.     return(1);
  1138.     };
  1139.   switch ( (int)(*t)[1]) {
  1140.     case XbWDMf_StrPar: grp_name = (char*)(*p)[1]; break;
  1141.     case XbWDMf_VLPar:  {
  1142.                           XbWDDb_DbIVar  *QQ;
  1143.                           QQ = (XbWDDb_DbIVar  *)(*p)[1];
  1144.                           if (QQ == NULL) { return(1); };
  1145.                           grp_name = (char*)XbWFDb_VarInh(QQ,XbWDDb_Str,NULL,1);
  1146.                           break;
  1147.                           };
  1148.     default: return(1);;
  1149.     };
  1150.   switch ( (int)(*t)[2]) {
  1151.     case XbWDMf_StrPar: win_name = (char*)(*p)[2]; break;
  1152.     case XbWDMf_VLPar:  {
  1153.                           XbWDDb_DbIVar  *QQ;
  1154.                           QQ = (XbWDDb_DbIVar  *)(*p)[2];
  1155.                           if (QQ == NULL) { return(1); };
  1156.                           win_name = (char*)XbWFDb_VarInh(QQ,XbWDDb_Str,NULL,1);
  1157.                           break;
  1158.                           };
  1159.     default: return(1);;
  1160.     };
  1161.   if ( XbWFDb_FindGrp("WDW",win_name) != NULL) {
  1162.     strcpy(grp_name,"WDW");
  1163.     return(0);
  1164.     };
  1165.   return(0);
  1166.   };
  1167. /*}}}  */
  1168. /*{{{  XbWFTb_AnswerPopUpReq(  ***   PopUpBox mit 3 Moeglichkeiten*/
  1169. int  XbWFTb_AnswerPopUpReq(void  *(*p)[]){
  1170.   int ii;
  1171.   if ((int)(*p)[0] != 8){return(1);};
  1172.   ii = XbWFTb_SubPopUpBox(
  1173.     (char*)(*p)[1],
  1174.     (char*)(*p)[2],
  1175.     (char*)(*p)[3],
  1176.     (char*)(*p)[4],
  1177.     (char*)(*p)[5]);
  1178.   switch(ii) {
  1179.     case 1:  XbWFMf_ReadMakro((char*)(*p)[6]); return(0);
  1180.     case 2:  XbWFMf_ReadMakro((char*)(*p)[7]); return(0);
  1181.     case 3:  XbWFMf_ReadMakro((char*)(*p)[8]); return(0);
  1182.     };
  1183.   return(1);
  1184.   };
  1185. /*}}}  */
  1186. /*{{{  XbWFTb_DbgMta(      ***   Debugging fuer Metafiles einschalten*/
  1187. void  XbWFTb_DbgMta(void){
  1188.   XbWVMf_dmf = 1;
  1189.   };
  1190. /*}}}  */
  1191. /*{{{  XbWFTb_ClrScr(      ***   Schirm loeschen*/
  1192. void  XbWFTb_ClrScr(void){
  1193.   int cs = XbWVMs_CSet;
  1194.   XbWFGr_CurOFF();
  1195.   XbWFWd_BackGr();
  1196.   if (cs) { XbWFGr_CurON(); };
  1197.   };
  1198. /*}}}  */
  1199. /*{{{  XbWFTb_AClosON(     ***   Automatisches WindowClose EIN;*/
  1200. void  XbWFTb_AClosON(void){
  1201.   XbWVWd_AClos = 1;
  1202.   };
  1203. /*}}}  */
  1204. /*{{{  XbWFTb_AClosOFF(    ***   ...AUS; wirkt wenn Wdw teilweise ueberdeckt*/
  1205. void  XbWFTb_AClosOFF(void){
  1206.   XbWVWd_AClos = 0;
  1207.   };
  1208. /*}}}  */
  1209. /*{{{  XbWFTb_RedrawON(    ***   Window neuzeichnen, wenn angecklickt &*/
  1210. void  XbWFTb_RedrawON(void){
  1211.   XbWVWd_RedrawON = 1;
  1212.   };
  1213. /*}}}  */
  1214. /*{{{  XbWFTb_RedrawOFF(   ***   ...teilweise verdeckt ist*/
  1215. void  XbWFTb_RedrawOFF(void){
  1216.   XbWVWd_RedrawON = 0;
  1217.   };
  1218. /*}}}  */
  1219. /*{{{  XbWFTb_SpwnTsk(     ***   Task spawn*/
  1220. void  XbWFTb_SpwnTsk(void){
  1221.   if (system(XbWVSy_DosCmd) != 0) {
  1222.     puts("Sorry, but I cannot start your task ");
  1223.     puts(XbWVSy_DosCmd);
  1224.     };
  1225.   };
  1226. /*}}}  */
  1227. /*{{{  XbWFTb_SpwnTskClrScr(   ***   Task spawn mit anschliessendem ClrScr*/
  1228. int  XbWFTb_SpwnTskClrScr(void  *(*p)[], int (*t)[]){
  1229.   if ((int)(*p)[0] < 1 ) {return(1);};
  1230.   if (!XbWSOS_SpwnStd(p,t)) {
  1231.     XbWSGr_ResMode();
  1232.     XbWSMs_DrInit();
  1233.     XbWFWd_BackGr();
  1234.     XbWFWd_DrawAll();
  1235.     return(0);
  1236.     };
  1237.   return(1);
  1238.   };
  1239. /*}}}  */
  1240. /*{{{  XbWFTb_SpwnTskTxtMod(   ***   Task im Textmode spawnen; dann ClrScr*/
  1241. int  XbWFTb_SpwnTskTxtMod(void  *(*p)[], int (*t)[]){
  1242.   if ((int)(*p)[0] < 1 ) {return(1);};
  1243.   XbWSGr_Close();
  1244.   return(XbWFTb_SpwnTskClrScr(p,t));
  1245.   };
  1246. /*}}}  */
  1247. /*{{{  XbWFTb_Click(       ***   Klick-Geraeusch*/
  1248. void  XbWFTb_Click(void){
  1249.   XbWDDb_DbIVar  *sv_gp;
  1250.   sv_gp = XbWFDb_FindGrp("SVR","genvars");
  1251.   if (sv_gp != NULL){
  1252.     if ((int)XbWFDb_GetNum(sv_gp,"Sound",1)) {
  1253.       XbWSOS_Sound(2000); XbWSOS_Delay(3); XbWSOS_NoSound();
  1254.       };
  1255.     };
  1256.   };
  1257. /*}}}  */
  1258. /*{{{  XbWFTb_HBeep(       ***   Hoher Piepton*/
  1259. void  XbWFTb_HBeep(void){
  1260.   XbWDDb_DbIVar  *sv_gp;
  1261.   sv_gp = XbWFDb_FindGrp("SVR","genvars");
  1262.   if (sv_gp != NULL){
  1263.     if ((int)XbWFDb_GetNum(sv_gp,"Sound",1)) {
  1264.       XbWSOS_Sound(1500);XbWSOS_Delay(50);XbWSOS_NoSound();
  1265.       };
  1266.     };
  1267.   };
  1268. /*}}}  */
  1269. /*{{{  XbWFTb_LBeep(       ***   Tiefer Piepton*/
  1270. void  XbWFTb_LBeep(void){
  1271.   XbWDDb_DbIVar  *sv_gp;
  1272.   sv_gp = XbWFDb_FindGrp("SVR","genvars");
  1273.   if (sv_gp != NULL){
  1274.     if ((int)XbWFDb_GetNum(sv_gp,"Sound",1)) {
  1275.       XbWSOS_Sound(1000);XbWSOS_Delay(50);XbWSOS_NoSound();
  1276.       };
  1277.     };
  1278.   };
  1279. /*}}}  */
  1280. /*{{{  XbWFTb_CorrSiz(     ***   Windowkoordinaten anpassen*/
  1281. void  XbWFTb_CorrSiz(
  1282.     int *xa,int *ya,int *xb,int *yb,
  1283.     int wxa, int wya, int wxb, int wyb){
  1284.   if (*xb-*xa > wxb-wxa) {/* Zu gross !! */ *xb = *xa + (wxb-wxa); };
  1285.   if (*yb-*ya > wyb-wya) {/* Zu gross !! */ *yb = *ya + (wyb-wya); };
  1286.   if (*xb > wxb) {/* Zu weit rechts !! */ *xa -= *xb -wxb; *xb = wxb; };
  1287.   if (*yb > wyb) {/* Zu weit unten !!  */ *ya -= *yb -wyb; *yb = wyb; };
  1288.   };
  1289. /*}}}  */
  1290. /*{{{  XbWFTb_Outl(        ***   Textzeile fuer PopUpBoxen ausgeben*/
  1291. void  XbWFTb_Outl(int xa, int *ya, char *txt, int col){
  1292.   XbWSGr_TLBox(xa,*ya,0,0,
  1293.     txt,col,col,col);
  1294.   *ya += (3+XbWFGr_THeight());
  1295.   };
  1296. /*}}}  */
  1297. /*{{{  XbWFTb_SubPopUpBox( ***   Unterroutine fuer PopUpBox*/
  1298. int  XbWFTb_SubPopUpBox(char msg1[50],char msg2[50],
  1299.             char text1[50],char text2[50],char text3[50]){
  1300.   int taste,mxp,myp;
  1301.  
  1302.   void  *oldcursor;
  1303.   int warn_state = 0;
  1304.  
  1305.   boolean Cursormerk;Cursormerk = XbWVMs_CSet;
  1306. #define XA1 3
  1307. #define YA1 26
  1308. #define XB1 XA1+118
  1309. #define YB1 YA1+14
  1310.  
  1311. #define XA2 XB1
  1312. #define YA2 YA1
  1313. #define XB2 XA2+118
  1314. #define YB2 YB1
  1315.  
  1316. #define XA3 XB2
  1317. #define YA3 YA1
  1318. #define XB3 XB2+118
  1319. #define YB3 YB1
  1320.  
  1321. #define XLO 5     /*   360      */
  1322. #define YLO 5     /*  5*11 = 55 */
  1323. #define XRU 370
  1324. #define YRU 60
  1325.   oldcursor = XbWSMs_SetClockCursor();
  1326.   { int rootx,rooty,winx,winy,mask;
  1327.     Window root, child;
  1328.     XQueryPointer(
  1329.       XbWVSy_ConTxt.dpy,
  1330.       XbWVSy_ConTxt.window,
  1331.       &root, &child,
  1332.       &rootx, &rooty,
  1333.       &winx, &winy,
  1334.       &mask
  1335.       );
  1336.     XbWSSy_SubWindow(rootx , rooty, XRU+5,YRU+5);
  1337.     };
  1338.   XbWFGr_CurOFF();
  1339.   XbWFGr_PushPort();
  1340.   XbWFGr_MaxPort();
  1341.   XbWSMs_SetArrowCursor();
  1342. neustart:
  1343.   XbWFGr_CurOFF();
  1344.   XbWFGr_MinPort(XLO,YLO,XRU,YRU);
  1345.   XbWFTb_HBeep(); XbWFTb_LBeep(); XbWFTb_HBeep(); XbWFTb_LBeep();
  1346.   XbWSGr_TLBox(0,0,(XRU-XLO),(YRU-YLO),
  1347.     NULL,XbWVGr_White,0,XbWVGr_LRed);
  1348.  
  1349.   XbWSGr_TLBox(XA1,YA1,XB1,YB1,text1,XbWVGr_Cyan,XbWVGr_White,XbWVGr_LCyan);
  1350.   XbWSGr_TLBox(XA2,YA2,XB2,YB2,text2,XbWVGr_Cyan,XbWVGr_White,XbWVGr_LCyan);
  1351.   XbWSGr_TLBox(XA3,YA3,XB3,YB3,text3,XbWVGr_Cyan,XbWVGr_White,XbWVGr_LCyan);
  1352.   XbWSGr_TLBox(14,3,0,0, msg1,XbWVGr_White,XbWVGr_Blue,0);
  1353.   XbWSGr_TLBox(14,13,0,0,msg2,XbWVGr_White,XbWVGr_Blue,0);
  1354.   XbWFGr_CurON();
  1355.  
  1356.   /*XbWSMs_Warp((XLO+XRU)/2,(YLO+YRU)/2);*/
  1357.   XbWSMs_IsAKey(0);
  1358.   XbWVMs_Button = 0;
  1359.   while (1){
  1360.     XEvent mev;
  1361.     if (!XbWFTb_InBox(XbWVMs_XPos,XbWVMs_YPos,XLO,YLO,XRU,YRU)) {
  1362. /*      XbWSMs_SetStopCursor(); */
  1363.       if (warn_state != 1){
  1364.         /*XbWFTb_Warning("Please quit the active pop-up box explicitly!");*/
  1365.         warn_state = 1;
  1366.         };
  1367.       }
  1368.     else  {
  1369.       XbWSMs_SetArrowCursor();
  1370.       if (warn_state != 2){
  1371.         /*XbWFTb_Message("You must quit this pop-up box explicitly.");*/
  1372.         warn_state = 2;
  1373.         };
  1374.       };
  1375.     XNextEvent(XbWVSy_ConTxt.dpy,&mev);
  1376.     switch (mev.type){
  1377.       case KeyPress:
  1378.             {
  1379.               KeySym keysym;
  1380.  
  1381.               int n;
  1382.               char string[257],cc;
  1383.               XKeyEvent *keyevent;
  1384.               keyevent = (XKeyEvent *)&mev;
  1385.               strcpy(string,"");
  1386.               n = XLookupString(keyevent, string, 256, &keysym, NULL);
  1387.               strncpy( XbWVSy_ConTxt.key,string,255);
  1388.               XbWVSy_ConTxt.key[255] = 0;
  1389.  
  1390.               cc = XbWVSy_ConTxt.key[0];
  1391.               cc |= 0x20;
  1392.               if (cc == (text1[0] | 0x20)) { taste = 1; goto ende_pop_up_box; };
  1393.               if (cc == (text2[0] | 0x20)) { taste = 2; goto ende_pop_up_box; };
  1394.               if (cc == (text3[0] | 0x20)) { taste = 3; goto ende_pop_up_box; };
  1395.               };
  1396.             break;
  1397.       case Expose:
  1398.       case EnterNotify:
  1399.              goto neustart;
  1400.       case ButtonPress:
  1401.              { int rootx,rooty,winx,winy,mask;
  1402.                Window root, child;
  1403.                if ( XQueryPointer(
  1404.                    XbWVSy_ConTxt.dpy,
  1405.                    XbWVSy_ConTxt.window,
  1406.                    &root, &child,
  1407.                    &rootx, &rooty,
  1408.                    &winx, &winy,
  1409.                    &mask
  1410.                    )
  1411.                    ){
  1412.                  XbWVMs_XPos = winx;
  1413.                  XbWVMs_YPos = winy;
  1414.                  if (mask & Button1Mask){
  1415.                    XbWVMs_LButt = 1;
  1416.                    taste = 0;
  1417.                    mxp = XbWVMs_XPos - XLO+ XbWVIDEO_XA;
  1418.                    myp = XbWVMs_YPos - YLO+ XbWVIDEO_YA;
  1419.                    if ( XbWFTb_InBox(mxp,myp,XA1,YA1,XB1,YB1) )   {
  1420.                        taste = 1;};
  1421.                    if ( XbWFTb_InBox(mxp,myp,XA2,YA2,XB2,YB2) )   {
  1422.                        taste = 2;};
  1423.                    if ( XbWFTb_InBox(mxp,myp,XA3,YA3,XB3,YB3) )   {
  1424.                        taste = 3;};
  1425.                    goto ende_pop_up_box;
  1426.                    };
  1427.                  };
  1428.                };
  1429.       };
  1430.  
  1431.     if ( XbWVMs_Bewegt )   {
  1432.       XbWFGr_CurOFF();
  1433.       XbWVMs_CX = XbWVMs_XPos;
  1434.       XbWVMs_CY = XbWVMs_XPos;
  1435.       XbWFGr_CurON();
  1436.       };
  1437.     };
  1438.   XbWFGr_CurOFF();
  1439.   ende_pop_up_box:;
  1440.   if ( (taste < 1) | (taste > 3) )   {
  1441.     goto neustart;};
  1442.   if (Cursormerk == 0)   {XbWFGr_CurOFF();};
  1443.   XbWSSy_SubWindow(0,0,0,0);
  1444.   XbWFGr_MaxPort();
  1445.   XbWFGr_PopPort(); XbWFGr_ResPort();
  1446.  
  1447.   XbWFWd_BackGr();
  1448.   XbWFWd_DrawAll();
  1449.  
  1450.   sleep(1);
  1451.   XbWSMs_SetClockCursor();
  1452.   XbWSMs_SetLastCursor(oldcursor);
  1453.   XbWFTb_Message("XbW - Multiwindow Dialogmanager.");
  1454.   return(taste);
  1455.   };
  1456.  
  1457. /*}}}  */
  1458. /*{{{  XbWFTb_PopUpBox(    ***   PopUpBox ausgeben*/
  1459. void  XbWFTb_PopUpBox(void  *(*p)[]){
  1460.   if ((int)(*p)[0] != 5){return;};
  1461.   XbWFTb_SubPopUpBox(
  1462.     (char*)(*p)[1],
  1463.     (char*)(*p)[2],
  1464.     (char*)(*p)[3],
  1465.     (char*)(*p)[4],
  1466.     (char*)(*p)[5]);
  1467.   };
  1468. /*}}}  */
  1469.  
  1470. /*{{{  XbWFTb_Wait(        ***   Warten; Zeit in Millisekunden*/
  1471. void  XbWFTb_Wait(int zeit){
  1472.   XbWSOS_Delay(zeit);
  1473.   };
  1474. /*}}}  */
  1475. /*{{{  XbWFGr_CurON(       ***   GrafikCursor ein*/
  1476. void  XbWFGr_CurON(void){
  1477. #ifdef XbWDGr_IBM8514
  1478.             XbWFGr_SetPort();
  1479. #endif
  1480.             XbWSMs_ON();
  1481. #ifdef XbWDGr_IBM8514
  1482.             XbWFGr_ResPort();
  1483. #endif
  1484.             };
  1485. /*}}}  */
  1486. /*{{{  XbWFGr_CurOFF(      ***   ...Aus*/
  1487. void  XbWFGr_CurOFF(void){
  1488. #ifdef XbWDGr_IBM8514
  1489.             XbWFGr_SetPort();
  1490. #endif
  1491.             XbWSMs_OFF();
  1492. #ifdef XbWDGr_IBM8514
  1493.             XbWFGr_ResPort();
  1494. #endif
  1495.             };
  1496.  
  1497. /*}}}  */
  1498.  
  1499. /*{{{  XbWFDb_GetHandle(      ****/
  1500. XbWDDb_Handle  XbWFDb_GetHandle(
  1501.     char *lname, char *gname, char *ename, int recursive){
  1502.   char  *target;
  1503.   char  *source;
  1504.   XbWDDb_DbIVar  *TV;
  1505.   if ((TV = XbWFDb_FindGrp(lname,gname) ) != NULL) {
  1506.     if (ename == NULL) { goto GetHandleEnde; };
  1507.     if (XbWFTb_CmpStr((char*)XbWFDb_GetNam(TV),ename) == 0) {
  1508.       goto GetHandleEnde;
  1509.       };
  1510.     while ((TV->tp & XbWDDb_Typ) != XbWDDb_GPtr) {
  1511.       XbWFDb_ForWd(&TV,XbWDDb_DbISys);
  1512.       if (XbWFTb_CmpStr((char*)XbWFDb_GetNam(TV),ename) == 0) {
  1513.         GetHandleEnde:;
  1514.         if (recursive) {
  1515.           while ((TV->tp & XbWDDb_Typ) == XbWDDb_NPtr){
  1516.             if (((XbWDDb_DbINPtr  *)TV)->inh == 0) {return(0);};
  1517.             TV = XbWFDb_CDbIToPtr( ((XbWDDb_DbINPtr  *)TV)->inh,XbWDDb_DbISys);
  1518.             if (TV == NULL) {return(0);};
  1519.             };
  1520.           };
  1521.         target = (char  *)XbWDDb_DbISys;
  1522.         source = (char  *)TV;
  1523.         return((XbWDDb_Handle)(source-target));
  1524.         };
  1525.       };
  1526.     };
  1527.   return(0);
  1528.   };
  1529. /*}}}  */
  1530. /*{{{  XbWFDb_SetGetNumber(      ****/
  1531. double  XbWFDb_SetGetNumber(
  1532.     XbWDDb_Handle element, double value, int oper){
  1533.   XbWDDb_DbIVar  *TV;
  1534.   char  *target;
  1535.   target = (char  *)XbWDDb_DbISys;
  1536.   TV = (XbWDDb_DbIVar  *)(target+element);
  1537.   switch (oper){
  1538.     case XbWDDb_Get:
  1539.            return(XbWFDb_GetNum(TV,NULL,1));
  1540.     case XbWDDb_Put:
  1541.            XbWFDb_PutNum(TV,NULL,1,value);
  1542.            return(value);
  1543.     };
  1544.   return(0);
  1545.   };
  1546. /*}}}  */
  1547. /*{{{  XbWFDb_SetGetString(      ****/
  1548. char  *XbWFDb_SetGetString(
  1549.     XbWDDb_Handle element, char  *qstr, int oper){
  1550.   XbWDDb_DbIVar  *TV;
  1551.   char  *target;
  1552.   target = (char  *)XbWDDb_DbISys;
  1553.   TV = (XbWDDb_DbIVar  *)(target+element);
  1554.   switch (oper){
  1555.     case XbWDDb_Get:
  1556.            return(XbWFDb_GetStr((XbWDDb_DbIStr  *)TV));
  1557.     case XbWDDb_Put:
  1558.            XbWFDb_PutStr(TV,NULL,1,(char*)qstr);
  1559.            return(qstr);
  1560.     };
  1561.   return(NULL);
  1562.   };
  1563. /*}}}  */
  1564.  
  1565.  
  1566.  
  1567.